home *** CD-ROM | disk | FTP | other *** search
- Path: news.larc.nasa.gov!amiga-request
- From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v91i056: NoDelete 1.4 - intercept DeleteFile() requests, Part01/01
- Reply-To: hoover@math4.uni-bielefeld.de (Uwe Sch"urkamp)
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v91i056@ab20.larc.nasa.gov>
- Date: 14 Mar 91 00:39:57 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga.misc
-
- Submitted-by: hoover@math4.uni-bielefeld.de (Uwe Sch"urkamp)
- Posting-number: Volume 91, Issue 056
- Archive-name: utilities/nodelete-1.4/part01
-
- [ includes uuencoded executable ...tad ]
-
- I wrote this program mainly to make the fantastic public domain game
- "Omega" more enjoyable to play. The author of this program thought it
- reasonable to have the system unlink the save-file after having reloaded it
- to somehow "simulate the continuity of character". Too bad that NoDelete
- does not work correctly with this program...
- Footnote: It works now!
-
- WHAT IT DOES
- NoDelete enables you erraneous humans to once again reflect on the
- righteousness of your decisions concerning the deleting of files on
- AmigaDos devices. If you try to delete a file or a program tries to remove
- it, this is mostly done via DeleteFile() of the dos.library. When
- executed, NoDelete bends this vector to its own routine which brings up
- this cute little requester on the active window. This requester contains
- the name of the file that the system is trying to delete. If you really
- want to delete this file, click to the "Yes, Delete!" gadget. If not,
- click to the "Oops, no way!"-Gadget of the requester. NoDelete works just
- fine with aliases, wildcards etc. For problems see the "known
- bugs"-section of this text.
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: nodelete.c nodelete.doc nodelete.uu
- # Wrapped by tadguy@ab20 on Wed Mar 13 19:39:55 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'nodelete.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.c'\"
- else
- echo shar: Extracting \"'nodelete.c'\" \(6661 characters\)
- sed "s/^X//" >'nodelete.c' <<'END_OF_FILE'
- X/* NoDelete V1.4E (C) HooverSoft 1990
- X
- X cc NoDelete +L
- X ln NoDelete -lc32
- X
- X
- X*/
- X
- X
- X#ifdef AZTEC_C /* Works under Manx, convert it to Lattice */
- X /* if you don't mind the hassle... */
- X
- X#include<intuition/intuition.h>
- X#include<intuition/intuitionbase.h>
- X#include<libraries/dos.h>
- X#include<libraries/dosextens.h>
- X#include<stdio.h>
- X/* #define DEBUG 1 */
- X
- Xchar bodystring[80],extensions[10][10], titlebak[80], title[80];
- XULONG answer, EXT_SET = 0L, howmany = 0L;
- XUBYTE *position, *rindex();
- XULONG OVERRIDE = 0L, SILENT = 0L;
- X
- Xstruct FileHandle *output, *Output();
- X
- Xstruct NewWindow mywindow = {
- X 100,0, /* window XY origin relative to TopLeft of screen */
- X 350,10, /* window width and height */
- X 0,1, /* detail and block pens */
- X CLOSEWINDOW+VANILLAKEY, /* IDCMP flags */
- X WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+SIMPLE_REFRESH, /* other window flags */
- X NULL, /* first gadget in gadget list */
- X NULL, /* custom CHECKMARK imagery */
- X (UBYTE *)title, /* window title */
- X NULL, /* custom screen pointer */
- X NULL, /* custom bitmap */
- X 5,5, /* minimum width and height */
- X 640,110, /* maximum width and height */
- X WBENCHSCREEN /* destination screen type */
- X };
- X
- X
- Xstruct IntuiText body = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 30,16,
- X NULL,
- X NULL,
- X NULL
- X };
- X
- Xstruct IntuiText fbody = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 30,5,
- X NULL,
- X (UBYTE *) "System tries to fool around...",
- X &body
- X };
- X
- Xstruct IntuiText ok = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 6,3,
- X NULL,
- X (UBYTE *) "Yes, Delete!",
- X NULL
- X };
- X
- Xstruct IntuiText no = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 6,3,
- X NULL,
- X (UBYTE *) "Oops, No Way!",
- X NULL
- X };
- X
- X
- Xstruct IntuiMessage *msg, *GetMsg();
- X
- Xstruct IntuitionBase *IntuitionBase;
- Xstruct Window *mw, *aw, *OpenWindow();
- Xstruct Library *DosBase;
- XUBYTE *filename;
- Xvoid *OpenLibrary();
- Xstruct Task *FindTask();
- X
- Xvoid NoDelete()
- X{
- X#asm
- X public _LVOSetProtection
- X
- X movem.l d0-d7/a0-a6,-(sp)
- X#endasm
- X geta4();
- X#asm
- X move.l d1,_filename
- X#endasm
- X
- X if(EXT_SET)
- X {
- X
- X position = rindex(filename, '.');
- X if(!position)
- X goto delete_anyway;
- X else
- X {
- X for(answer=0L; answer < howmany; answer++)
- X {
- X if( (strcmp( (UBYTE *) position, (UBYTE *) extensions[answer])) != 0L)
- X continue;
- X else
- X goto request;
- X }
- X }
- X goto delete_anyway;
- X }
- Xrequest:
- X strcpy(bodystring, "Delete File `");
- X strcat(bodystring, (char *)filename);
- X strcat(bodystring, "'?");
- X body.IText = (UBYTE *) bodystring;
- X aw = (struct Window *) IntuitionBase->ActiveWindow;
- X answer = (long)AutoRequest(aw, &fbody, &ok, &no, NULL, NULL, 360L, 61L);
- X if(!answer)
- X {
- X ;
- X#asm
- X movem.l (sp)+,d0-d7/a0-a6
- X move.l #1,d0
- X#endasm
- X return;
- X }
- X
- X if(answer)
- X {
- X
- Xdelete_anyway:
- X ;
- X#asm
- X
- X move.l _DosBase,a6
- X move.l #$70f7,d0 ;restore old vector
- X move.w d0,-72(a6)
- X move.l #$60000092,d0
- X move.l d0,-70(a6)
- X
- X tst.l _OVERRIDE
- X beq.s _dont_unprotect
- X
- X move.l _filename,d1
- X
- X
- X move.l #0,d2
- X jsr _LVOSetProtection(a6)
- X
- X_dont_unprotect:
- X
- X move.l _filename,d1
- X jsr -72(a6) ;DeleteFile() call
- X#endasm
- X
- X ;
- X
- X SetFunction(DosBase, -72L, &NoDelete);
- X
- X/* install our function */
- X
- X
- X#asm
- X movem.l (sp)+,d0-d7/a0-a6
- X move.l #1,d0
- X#endasm
- X return;
- X }
- X }
- X
- X
- Xvoid quit(why)
- XUBYTE *why;
- X{
- X if(!SILENT)
- X Write(output, why, (ULONG) strlen(why) );
- X SetTaskPri((struct Task *)FindTask(0L), 0L);
- X if(DosBase)
- X {
- X ;
- X#asm
- X move.l _DosBase,a6
- X move.l #$70f7,d0 ;restore old vector
- X move.w d0,-72(a6)
- X move.l #$60000092,d0
- X move.l d0,-70(a6)
- X#endasm
- X ;
- X }
- X
- X if (mw)
- X CloseWindow(mw);
- X
- X if (DosBase)
- X CloseLibrary(DosBase);
- X
- X if (IntuitionBase)
- X CloseLibrary(IntuitionBase);
- X
- X exit(0L);
- X}
- X
- X/* test_nd() tests the DeleteFile vector to see if NoDelete is already
- X installed. Returns zero if NoDelete is installed, one if it is not.
- X*/
- X#asm
- X public _test_nd
- X_test_nd:
- X
- X move.l _DosBase,a6
- X cmpi.l #$60000092,-70(a6)
- X bne.s _is_there
- X moveq #1,d0
- X bra.s _fuckoff
- X_is_there:
- X moveq #0,d0
- X_fuckoff:
- X rts
- X#endasm
- Xvoid main(argc,argv)
- Xlong argc;
- Xchar *argv[];
- X {
- X
- X static UBYTE *msg1 = (UBYTE *)"Installing NoDelete...";
- X static UBYTE *msg2 = (UBYTE *)"done. NoDelete V1.4E (c) HooverSoft 1990\n\n";
- X long i;
- X
- X DosBase = (struct Library *) OpenLibrary("dos.library",0L);
- X output = Output();
- X strcpy(title, (UBYTE *) "NoDelete V1.4E (c) HooverSoft");
- X
- X if(argc > 11)
- X quit("Sorry, only 10 extensions allowed!\n");
- X
- X if(argc >= 2)
- X {
- X for(i=1; i<argc; i++)
- X {
- X
- X if(argv[i][0] == '.')
- X {
- X EXT_SET = 1L;
- X strcpy(extensions[howmany], argv[i]);
- X howmany++;
- X }
- X else
- X continue;
- X
- X#ifdef DEBUG
- X printf("Copied %s, Result: %s\n", argv[i], extensions[i-1L]);
- X#endif
- X }
- X
- X#ifdef DEBUG
- X printf("I found %ld extensions.\n", howmany);
- X#endif
- X
- X
- X if(howmany)
- X strcat(title, (UBYTE *) " EXT SET");
- X
- X for(i=1; i<argc; i++)
- X {
- X#ifdef DEBUG
- X printf("Scanning argv[%ld]: %s\n", i, (UBYTE *) argv[i] );
- X#endif
- X if( (char) argv[i][0] == '-')
- X switch( (char) argv[i][1] )
- X {
- X case 'y': if( atoi(argv[i+1]) <= 245L)
- X mywindow.TopEdge = atoi(argv[i+1]);
- X break;
- X
- X case 'p': if(atoi(argv[i+1]) < 10L && atoi(argv[i+1]) > -20L)
- X SetTaskPri((struct Task *)FindTask(0L),\
- X (long)atoi(argv[i+1]));
- X else
- X SetTaskPri((struct Task *)FindTask(0L), -5L);
- X break;
- X
- X case 'O': OVERRIDE = 1L;
- X break;
- X
- X case 'S': SILENT = 1L;
- X break;
- X
- X case default: break;
- X }
- X /* end switch */
- X /*end if */
- X /*end for */
- X }
- X
- X }
- X
- X if(!howmany)
- X {
- X EXT_SET = 0L;
- X strcat(title, (UBYTE *) " NO EXT");
- X }
- X
- X/* calculate dimension of TitleBar */
- X
- X mywindow.Width = ( strlen(title) * 8L) + 85L;
- X mywindow.LeftEdge = (640L-mywindow.Width) / 2L;
- X
- X IntuitionBase = OpenLibrary("intuition.library",0L);
- X if(!SILENT)
- X Write(output, msg1, (ULONG)strlen(msg1));
- X
- X if( !test_nd() && !SILENT )
- X {
- X Write(output, "NoDelete already installed.\n",28L);
- X CloseLibrary(DosBase);
- X CloseLibrary(IntuitionBase);
- X exit(0L);
- X }
- X
- X mw = OpenWindow(&mywindow);
- X if(!mw)
- X quit("Could not open Window.\n\n");
- X if(!SILENT)
- X Write(output, msg2, (ULONG)strlen(msg2));
- X
- X SetFunction(DosBase, -72L, &NoDelete);
- X
- X for(;;)
- X {
- X Wait(1L << mw->UserPort->mp_SigBit);
- Xgetmsg:
- X msg = GetMsg(mw->UserPort);
- X ReplyMsg(msg);
- X if (msg->Class == CLOSEWINDOW)
- X quit("NoDelete V1.4E exiting.\n\n");
- X if(msg->Class == VANILLAKEY)
- X {
- X strcpy(titlebak, (UBYTE *) "Extensions: ");
- X for(i=0L; i < howmany ; i++)
- X {
- X strcat(titlebak, extensions[i]);
- X strcat(titlebak, " ");
- X }
- X SetWindowTitles(mw, titlebak);
- X Wait(1L << mw->UserPort->mp_SigBit);
- X SetWindowTitles(mw, title);
- X ReplyMsg( GetMsg(mw->UserPort) );
- X }
- X
- X else
- X continue;
- X }
- X }
- X#endif
- X
- END_OF_FILE
- if test 6661 -ne `wc -c <'nodelete.c'`; then
- echo shar: \"'nodelete.c'\" unpacked with wrong size!
- fi
- # end of 'nodelete.c'
- fi
- if test -f 'nodelete.doc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.doc'\"
- else
- echo shar: Extracting \"'nodelete.doc'\" \(8113 characters\)
- sed "s/^X//" >'nodelete.doc' <<'END_OF_FILE'
- X *************************************************************************
- X * NoDelete V1.4 (C) HooverSoft Oct 30th, 1990 *
- X *************************************************************************
- X
- XUSAGE: 1> run NoDelete [extensions] [-p priority] [-y ypos] <ENTER>
- X from CLI only.
- X
- X
- X
- X
- X HISTORY
- X
- X CHANGES TO VERSION 1.35: OCT 1990
- XProgrammed two new options -O and -S (Cheers, John!). These options sort
- Xof "fix" a bug whith NoDelete which used to override the file protection
- Xbit.
- X
- X CHANGES TO VERSION 1.3: SEP 1990
- XLots of changes. Thinking of writing a new documentation. Anyway,
- Xintroduced command line options -p and -y for run-time setting of priority
- Xof NoDelete and of vertical position of titlebar.
- X
- X CHANGES TO VERSION 1.2: AUG 1990
- XIntroduced the possibilty to give multiple extensions on startup. Lists
- Xextensions when pressing a key while Nodelete's titlebar is active.
- X
- X CHANGES TO VERSION 1.1: Aug 1990
- XNoDelete now automatically centers the Dragbar on Screen and calculates the
- Xcorrect width for the window if a extension is specified.
- X
- XNow works fine with AmiOmega. System won't crash if "Yes, Delete!" is
- Xselected.
- X
- XNow supports the use of extensions to ask confirmations only for special
- Xfiles ending in defined extension. Will show the selected extension in
- Xwindow's titlebar.
- X
- XNoDelete now checks if another NoDelete is already active and exits if
- Xtrue.
- X
- X CHANGES TO VERSION 1.01: Jul 1990
- XNow handles protected Files correctly. Previous version didn't complain if
- Xfile was delete protected.
- X
- XNoDelete sets its priority to a value of -5 directly after startup.
- X
- X CHANGES TO VERSION 1.00: June 1990
- XVersion 1.01 now restores the Dos Vector relative to _DosBase, so this
- Xprogram should work under Kickstart 1.3 as well. If someone already uses
- XKick 2.0, he or she should let me know if NoDelete works with that. I have
- Xheard that the funny instructions in DosBase have been replaced with a
- Xregular jump table.
- X
- X
- X WHY USE NODELETE?
- XI wrote this program mainly to make the fantastic public domain game
- X"Omega" more enjoyable to play. The author of this program thought it
- Xreasonable to have the system unlink the save-file after having reloaded it
- Xto somehow "simulate the continuity of character". Too bad that NoDelete
- Xdoes not work correctly with this program...
- XFootnote: It works now!
- X
- X WHAT IT DOES
- XNoDelete enables you erraneous humans to once again reflect on the
- Xrighteousness of your decisions concerning the deleting of files on
- XAmigaDos devices. If you try to delete a file or a program tries to remove
- Xit, this is mostly done via DeleteFile() of the dos.library. When
- Xexecuted, NoDelete bends this vector to its own routine which brings up
- Xthis cute little requester on the active window. This requester contains
- Xthe name of the file that the system is trying to delete. If you really
- Xwant to delete this file, click to the "Yes, Delete!" gadget. If not,
- Xclick to the "Oops, no way!"-Gadget of the requester. NoDelete works just
- Xfine with aliases, wildcards etc. For problems see the "known
- Xbugs"-section of this text.
- X
- X EXTENSIONS
- XLots of programs, programmers and normal people use extensions in their
- Xfile system to be able to immediately make out the contents of a file. For
- Xexample, ".c" specifies the file to be a C source code and ".bas" should
- Xcontain a basic program's source. There are tons of frequently used
- Xextensions, from ".asm" up to ".cfg". If you use NoDelete and you don't
- Xwant the system to get on your nerves by confirming EVERY rm command, you
- Xshould use a certain extension on NoDelete's command line to tell NoDelete
- Xthat it should only ask confirmation for those precious ".c" or ".iff"
- Xfiles and let all others alone.
- X
- XThe command line
- X
- X 1> run nodelete .c
- X
- Xwould tell NoDelete to only intercept the removing of files ending in ".c"
- Xand not to worry about any other files that are removed from the device.
- X
- XYou can specifiy up to ten extensions when running NoDelete. The command
- X
- X 1> run NoDelete .c .iff .tex .asm
- X
- Xwill make NoDelete complain about any file which ends in one of the
- Xspecified extensions and leave all others alone. If you have forgotten
- Xwhich extensions you specified at startup, just activate NoDelete's
- Xtitlebar and press any key. NoDelete will then give a list of extensions
- Xin the titlebar until another key is pressed.
- X
- X
- X
- X COMMAND LINE OPTIONS
- XFinally, HooverSoft is proud to have introduced command line options in
- XNoDelete. So far, four options are supported:
- X
- X-p number where number is an integer between -20 and 9. If given on
- X the command line, NoDelete will set its priority to this
- X value. If you type rubbish or use values not allowed, the
- X default priority of -5 is set.
- X
- X-y ypos where ypos is an integer ranging from zero to 245 (sorry,
- X all you NTSC users...). This number will determine the ver-
- X tical position of NoDelete's titlebar. if you try to fool
- X NoDelete or do not give this option, the default value zero
- X (top of screen) is used.
- X
- X-O Override file protection bit. If this option is given,
- X NoDelete will NOT care about the file's protection status.
- X This option is sort of dangerous, but I think I you are
- X explicitly asked wether you want to delete a file this
- X should be presto! wiped off the disk without return or
- X any other chance of survival..., Anyway, the default now
- X is to consider and respect the file protection.
- X
- X-S if given, this option tells NoDelete to shut up. No screams,
- X no comments!
- X
- X KNOWN BUGS
- XNoDelete cannot take care of the AmigaDos command Delete. God knows how
- Xthis command erases a disk file...
- X
- XThe Shell won't complain if you try to delete any non-existent file while
- XNoDelete has its grip on the system. This is not really a bug because
- XNoDelete works on this basis of cheating the calling function and
- Xpretending that everything is just fine and deleted. This also is the cause
- Xthat the calling program will not be informed if the file in question
- Xis delete protected.
- X
- XSometimes it is possible to get two copies of NoDelete running at the same
- Xtime. I can't explain how this is to be done, but somehow it works...
- XAnyway this happens very seldomly.
- X
- X THE LEGAL STUFF
- XNoDelete is Public Domain and may be copied freely by everyone except for
- Xpurposes listed below as long as this notice is left intact. This program
- Xis copyright (C) by HooverSoft. It may NOT be copied or sold for
- Xcommercial purposes without written permssion by the author (Get lost,
- XCarsten Wolf and all you other suckers!). It may be distributed and copied
- Xfreely for non-commercial purposes only.
- X
- XWhen distributed, this program should always be accompanied by this file,
- Xthe documentation.
- X
- X FURTHER PLANS & HOPELESS DREAMS
- XI would like to use CreateTask() to launch a separate Task for Nodelete.
- XThis would unlink NoDelete's memory requirements from the current stacksize
- Xof the system. It would be nice if "delete" could also be disabled but I
- Xam not sure how to do this.
- X
- X PUBLIC FEEDBACK
- XBug reports (cheers, Jensi & John!), criticism, comments and approvements
- Xshould be sent to
- X
- X SNAIL:
- X HooverSoft Inc.
- X Joellenbecker Weg 4
- X 4900 Herford
- X
- X BITNET:
- X hoover@math4.uni-bielefeld.de
- X
- X DISCLAIMER
- XDo whatever you like with this program, but listen: you can't blaim it on
- Xme if anything goes down the drain!
- X
- XHave fun & God bless you, Hoover
- END_OF_FILE
- if test 8113 -ne `wc -c <'nodelete.doc'`; then
- echo shar: \"'nodelete.doc'\" unpacked with wrong size!
- fi
- # end of 'nodelete.doc'
- fi
- if test -f 'nodelete.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.uu'\"
- else
- echo shar: Extracting \"'nodelete.uu'\" \(6607 characters\)
- sed "s/^X//" >'nodelete.uu' <<'END_OF_FILE'
- Xbegin 644 nodelete
- XM```#\P`````````#``````````(```0I````O`````$```/I```$*4[Z""13%
- XM>7-T96T@=')I97,@=&\@9F]O;"!A<F]U;F0N+BX``%EE<RP@1&5L971E(0``P
- XM3V]P<RP@3F\@5V%Y(0!.50``2.?__DZZ"$XI08*:2JR``F=22'@`+B\L@II.S
- XMN@;84$\I0()^2JR"?F<``+1"K()Z8"9R"B`L@GI.N@YF0>R!=M"(+P`O+()^G
- XM3KH':%!/2H!F`F`04JR">B`L@GJPK(`&9=!@>DAZ`,9(;($F3KH&IE!/+RR"^
- XMFDAL@29.N@KR4$](>@"X2&R!)DZZ"N103T'L@28I2(!.(&R"BBEH`#2"DDAX&
- XM`#U(>`%H0J="ITAL@'Y(;(!J2&R`5B\L@I).N@]63^\`("E`@GI*K()Z9@I,?
- XMWW__<`%.74YU2JR">F=,+&R"EB`\``!P]SU`_[@@/&```)(M0/^Z2JR`"F<*M
- XM(BR"FG0`3J[_1B(L@II.KO^X2'K^[$AX_[@O+(*63KH.ED_O``Q,WW__<`%@"
- XMJF"H1&5L971E($9I;&4@8``G/P``3E4``$JL@`YF'"\M``A.N@766$\O`"\MM
- XM``@O+(*"3KH-L$_O``Q"IT*G3KH-[%A/+P!.N@Y44$]*K(*69Q@L;(*6(#P`!
- XM`'#W/4#_N"`\8```DBU`_[I*K(*.9PHO+(*.3KH.DEA/2JR"EF<*+RR"EDZZZ
- XM#8A83TJL@HIG"B\L@HI.N@UX6$]"ITZZ"TY83TY=3G4L;(*6#*Y@``"2_[IFD
- XM!'`!8`)P`$YU3E7__$*G2'H$.$ZZ#9Q03RE`@I9.N@SV*4""@DAZ!"Y(;((JK
- XM3KH%"%!/#*T````+``AO"DAZ!#).NO\>6$\,K0````(`"&T``;`K?`````'_%
- XM_&!*("W__.6`(&T`#")P"``,$0`N9C(I?`````&``B`M__SE@"!M``PO,`@`^
- XM<@H@+(`&3KH,-$'L@7;0B"\`3KH$G%!/4JR`!E*M__P@+?_\L*T`"&VL2JR`"
- XM!F<.2'H#W$AL@BI.N@C04$\K?`````'__&```28@+?_\Y8`@;0`,(G`(``P1B
- XM`"UF``$,("W__.6`(&T`#")P"``0*0`!2(!(P&```-`@+?_\4H#E@"!M``PO!
- XM,`@`3KH$1EA/L+P```#U;AH@+?_\4H#E@"!M``PO,`@`3KH$*%A/.4"`%&``A
- XM`+8@+?_\4H#E@"!M``PO,`@`3KH$"EA/L+P````*;$@@+?_\4H#E@"!M``POC
- XM,`@`3KH#[%A/L+S____L;RH@+?_\4H#E@"!M``PO,`@`3KH#SEA/+P!"ITZZC
- XM"^183R\`3KH,3%!/8!1(>/_[0J=.N@O.6$\O`$ZZ##903V`X*7P````!@`I@C
- XM+BE\`````8`.8"1@(I"\````3V?B68!GZ)"\````'6<`_UJ0O`````EG`/\4L
- XM8-Q2K?_\("W__+"M``AM`/[22JR`!F820JR``DAZ`I%(;((J3KH'?%!/2&R"9
- XM*DZZ`RA83^>`T+P```!5.4"`%B`\```"@#(L@!9(P9"!<@).N@A0.4"`$D*G/
- XM2'H"6TZZ"V)03RE`@HI*K(`.9APO+("23KH"Y%A/+P`O+("2+RR"@DZZ"KY/*
- XM[P`,3KK]>$J`9C9*K(`.9C!(>``<2'H"*R\L@H).N@J<3^\`#"\L@I9.N@JZ9
- XM6$\O+(**3KH*L%A/0J=.N@B&6$](;(`23KH+I%A/*4""CDJL@HYF"DAZ`@A.*
- XMNOR06$]*K(`.9APO+("63KH"9EA/+P`O+("6+RR"@DZZ"D!/[P`,2'K[)DAXY
- XM_[@O+(*63KH*T$_O``P@;(*.(F@`5G``$"D`#W(!X:$O`4ZZ"MA83R!L@HXO+
- XM*`!63KH*<EA/*4""AB\L@H9.N@J(6$\@;(**@```(``!1F"DAZ`9U.NOP,\
- XM6$\@;(**@`(````!1F``":2'H!G4AL@=I.N@'$4$]"K?_\8"YR"B`M__Q.(
- XMN@D^0>R!=M"(+P!(;(':3KH%_%!/2'H!>DAL@=I.N@7N4$]2K?_\("W__+"LG
- XM@`9ER$AL@=HO+(*.3KH*KE!/(&R"CB)H`%9P`!`I``]R`>&A+P%.N@H@6$](&
- XM;((J+RR"CDZZ"H903R!L@HXO*`!63KH)K%A/+P!.N@G(6$]@`/\(3EU.=4ENB
- XM<W1A;&QI;F<@3F]$96QE=&4N+BX`9&]N92X@3F]$96QE=&4@5C$N-$4@J2!(;
- XM;V]V97)3;V9T(#$Y.3`*"@!D;W,N;&EB<F%R>0!.;T1E;&5T92!6,2XT12"I>
- XM($AO;W9E<E-O9G0`4V]R<GDL(&]N;'D@,3`@97AT96YS:6]N<R!A;&QO=V5D5
- XM(0H`($585"!3150`($Y/($585`!I;G1U:71I;VXN;&EB<F%R>0!.;T1E;&5T'
- XM92!A;')E861Y(&EN<W1A;&QE9"X*`$-O=6QD(&YO="!O<&5N(%=I;F1O=RX*)
- XM"@!.;T1E;&5T92!6,2XT12!E>&ET:6YG+@H*`$5X=&5N<VEO;G,Z(``@`"!O[
- XM``0B2$H89OQ3B!`O``NSR&<(L"!F^"`(3G5P`$YU(&\`!"`((F\`"!#99OQ.Z
- XM=2!O``0@"$H89OR1P"`(4X!.=4Y5``!(YPP@)&T`"`P2`"!G!@P2``EF!%**R
- XM8/!Z``P2`"UF!GH!4HI@"`P2`"MF`E**>`!@("!*4HH0$$B`2,!R"B\`(`1.8
- XMN@<B(A_2@"@!F+P````P$!)(@$C`0>R`FP@P``((`&;.2H5G!B`$1(!@`B`$]
- XM3-\$,$Y=3G4P/'__8`0P+P`.4T!K%"!O``0B;P`(L0EF#%-(2AA7R/_V<`!.!
- XM=6,$<`%.=7#_3G5A<$/L@29%[($FM<EF#C(\`')K"'0`(L)1R?_\*4^"GBQXO
- XM``0I3H*B2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4""?
- XMIF8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y51
- XM```O"DAY``$``#`L@1S!_``&+P!.N@;4*4""JE!/9A1"ITAY``$``$ZZ!IA07
- XM3RYL@IY.=2!L@JI":``$(&R"JC%\``$`$"!L@JHQ?``!``H@;(*>("R"GI"HH
- XM``10@"E`@JX@;(*N(+Q-04Y80J=.N@:,)$!*J@"L6$]G,"\M``PO+0`(+PI.1
- XMN@"R*7P````!@K(@;(*J`&B````$(&R"J@!H@```"D_O``Q@0DAJ`%Q.N@;2N
- XM2&H`7$ZZ!FHI0(*V(&R"MDJH`"103V<0(&R"MB)H`"0O$4ZZ!9I83R\L@K8O9
- XM"DZZ`G@I;(*V@KI03TZZ!8X@;(*J((!.N@6>(&R"JB%```9G%DAX`^U(>@`L,
- XM3KH%=B!L@JHA0``,4$\O+(*Z+RR"ODZZ^&)"ITZZ`XQ/[P`,)%].74YU*@!..
- XM50``2.<,,"1M`!`@;0`(2J@`K&<8(&T`""`H`*SE@"@`($0@*``0Y8`F0&`$4
- XM)FR!'A`32(!(P-"M``Q4@"E`@L)"IR\L@L).N@5F*4""QE!/9@A,WPPP3EU.'
- XM=1`32(!(P"H`+P4@2U*(+P@O+(+&3KH!CB!L@L;1Q4/Z`5@0V6;\+RT`#"\*H
- XM+RR"QDZZ`4X@;(+&0C!8`"E\`````8*^(&R"QM'%)DA2BR1+3^\`&!`32(!(K
- XMP"H`L+P````@9R"ZO`````EG&+J\````#&<0NKP````-9PBZO`````IF!%*+M
- XM8,P,$P`@;0``C`P3`")F,E*+($M2BQ`02(!(P"H`9R`@2E**$(6ZO````")F<
- XM$`P3`")F!%*+8`9"*O__8`)@TF!$($M2BQ`02(!(P"H`9S"ZO````"!G*+J\T
- XM````"6<@NKP````,9QBZO`````UG$+J\````"F<(($I2BA"%8,(@2E**0A!*9
- XMA68"4XM2K(*^8`#_/$(20J<@+(*^4H#E@"\`3KH$*BE`@KI03V8(0JR"OF``)
- XM_KYZ`"9L@L9@'B`%Y8`@;(*Z(8L(`"!+(`A*&&;\D<!3B%*(U\A2A;JL@KYMZ
- XMW"`%Y8`@;(*Z0K`(`&``_H(@`#`\?_]@!#`O``X@;P`$2AAF_%-((F\`"%-`!
- XM$-E7R/_\9P)"$"`O``1.=4SO`P``!"`((B\`#&`"$-E7R?_\9P9206`"0AA1.
- XMR?_\3G5.50``2.<.,"1M``A"ITAZ`(Y.N@/$*4""RE!/9@A,WPQP3EU.=2!M<
- XM``PB:``D+RD`!$ZZ!!HH`%A/9U)(>@!M($0O*``V3KH#["9`2H!03V<T2'@#(
- XM[2\+3KH"T"P`4$]G)"`&Y8`J`"!%)6@`"`"D)48`G$AX`^U(>@`X3KH"K"5`V
- XM`*!03R\$3KH#N%A/+RR"RDZZ`NI"K(+*6$]@@&EC;VXN;&EB<F%R>0!724Y$V
- XM3U<`*@!(YT@`0H1*@&H$1(!21$J!:@9$@0I$``%A/DI$9P)$@$S?`!)*@$YU2
- XM2.=(`$*$2H!J!$2`4D1*@6H"1(%A&B`!8-@O`6$2(`$B'TJ`3G4O`6$&(A]*3
- XM@$YU2.<P`$A!2D%F($A!-@$T`$)`2$"`PR(`2$`R`H+#,`%"04A!3-\`#$YU7
- XM2$$F`2(`0D%(04A`0D!T#]"`TX&V@6($DH-20%'*__),WP`,3G5.50``2JR"T
- XMSF<&(&R"SDZ0+RT`"$ZZ``A83TY=3G5.5?_\+P0K;0`(__Q*K(*J9RQX`&`*!
- XM+P1.N@#\6$]2A#`L@1Q(P+B`;>PP+($<P?P`!B\`+RR"JDZZ`@!03TJL@M)G2
- XM!B!L@M).D$JL@2)G"B\L@2).N@%T6$]*K(+69P@@;(+6(*R"VDJL@MYG"B\L;
- XM@MY.N@&46$]*K(+B9PHO+(+B3KH!A%A/2JR"YF<*+RR"YDZZ`7183TJL@NIGA
- XM"B\L@NI.N@%D6$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].<TJLU
- XM@K9F*DJL@L9G(B\L@L(O+(+&3KH!7"`L@KY2@.6`+P`O+(*Z3KH!2D_O`!!@`
- XM#DZZ`3@O+(*V3KH!<%A/("W__"YL@IY.=2@?3EU.=4Y5``!(YPX@*"T`"'(&1
- XM(`1.N@!$)$#5[(*J2H1M#C`L@1Q(P+B`;`1*DF82*7P````"@NYP_TS?!'!.Z
- XM74YU,"H`!,!\@`!F""\23KH`+EA/0I)P`@2.=P`#0!Q,`F`4A#QL!(0T)#J
- XMU(-(0,#!2$!"0-""3-\`#DYU(B\`!"QL@J9.[O_<(B\`!"QL@J9.[O^"+&R"0
- XMID[N_\I,[P`&``0L;(*F3N[_XD[Z``(L;(*F3N[_Q$[Z``(B+P`$+&R"ID[NQ
- XM_Z9.^@`"3.\`#@`$+&R"ID[N_]!(YP$$3.\@@``,+&R"HDZN_Y1,WR"`3G5.)
- XM^@`"(F\`!"QL@J).[OYB3.\``P`$+&R"HD[N_SI.^@`"(F\`!"QL@J).[O[:+
- XM+&R"HD[N_WPB;P`$("\`""QL@J).[O\N3OH``B!O``0L;(*B3N[^C$[Z``(L9
- XM;(*B(F\`!"`O``A.[OW83OH``B)O``0L;(*B3N[^AB)O``0@;P`(("\`#"QL'
- XM@J).[OY<(F\`!"`O``@L;(*B3N[^U"`O``0L;(*B3N[^PB!O``0L;(*B3N[^$
- XM@$SO`P``!"QL@LI.[O^@(&\`!"QL@LI.[O^F(&\`!"QL@LI.[O^R2.<`,$SO7
- XM#P``#$SO``\`'"QL@HI.KOZD3-\,`$YU(&\`!"QL@HI.[O^X(&\`!"QL@HI.L
- XM[O\T+PI,[P<```@L;(**3J[^["1?3G4``````^P````!`````0``")H`````'
- XM```#\@```^H```!)``````````````````````!D```!7@`*``$`(`(`````;
- XM3@`````````````"*`````````````4`!0*``&X``0$``@``'@`0````````D
- XM`````````0`"```>``4`````````!````$`!``(```8``P`````````D````:
- XM``$``@``!@`#`````````#(````````&*@``!D$`("`@("`@("`@,#`P,#`@E
- XM("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,#`P,#$!`H
- XM0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*"@H*"@("*
- XM`@("`@("`@("`@("`@("`@("0$!`0"```!0``````````````^P````"````)
- XM`0```"H```!D````!0````````!@````=````(@```"0````E`````````/R)
- X,```#ZP````$```/RD
- X``
- Xend
- Xsize 4692
- END_OF_FILE
- if test 6607 -ne `wc -c <'nodelete.uu'`; then
- echo shar: \"'nodelete.uu'\" unpacked with wrong size!
- fi
- # end of 'nodelete.uu'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.misc.
-